#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <cassert>

typedef int DListDataType;

typedef struct DListNode {
	DListDataType data;
	struct DListNode* prev;
	struct DListNode* next;
}DListNode;

void DListInit(DListNode** pphead);  // 初始化
void DListClear(DListNode* phead);   // 清理
void DListDestory(DListNode** pphead); // 销毁
DListNode* CreateDListNode(DListDataType value); // 创建结点
void DListPrint(DListNode* phead); // 打印链表
void DListPushBack(DListNode* phead, DListDataType value); // 尾插
void DListPopBack(DListNode* phead); // 尾删
void DListPushFront(DListNode* phead, DListDataType value); // 头插
void DListPopFront(DListNode* phead);   // 头删
DListNode* DListFind(DListNode* phead, DListDataType value); // 查找
void DListInsert(DListNode* pos, DListDataType value); // 在pos前面插入结点
void DListErase(DListNode* pos); // 删除

